package com.shaozj.gateway.config;

import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import com.shaozj.core.result.ResultCode;
import jakarta.annotation.PostConstruct;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerResponse;

/**
 * 自定义网关流控异常
 * @PostConstruct注解： 主要用于标注在方法上，以便在Spring容器初始化bean之后执行该方法，它属于javax.annotation 包的一部分，并且通常用于需要在 bean 初始化后进行一些自定义初始化操作的场景中。
 */
//@Configuration
public class SentinelConfig {

    /**
     *  GatewayCallbackManager 注册回调进行定制
     *  setBlockHandler：
     */
    @PostConstruct
    private void initBlockHandler() {
        GatewayCallbackManager.setBlockHandler(
                (exchange, t) ->
                        ServerResponse
                                .status(HttpStatus.TOO_MANY_REQUESTS)
                                .contentType(MediaType.APPLICATION_JSON)
                                .body(
                                        BodyInserters.fromValue(ResultCode.FLOW_LIMITING.toString())
                                )

        );
    }
}
